"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.appendContentToFile = exports.isFoldOrNot = exports.filterTypeArr = exports.renameFileToNewname = exports.filterOnlyFileArr = exports.filterOnlyFoldArr = exports.thisFoldName = exports.thisFileName = void 0;
//同以目录下的文件更名：
var fs = require("fs");
var path = require("path");
var os = require("os");
var addAbortSignal = require("stream").addAbortSignal;
var start = require("repl").start;
var time = require("console").time;
exports.thisFileName = __filename.replace(__dirname, "").substr(1); //script_把该文件夹下所有文件信息打印出来并且打印该文件夹名字和该文件夹下的文件夹的名字.js
exports.thisFoldName = basename(proPath);
// __dirname就是该文件的文件名（此文件的文件名）
// console.log(__dirname);//node script_把该文件夹下所有文件信息打印出来并且打印该文件夹名字和该文件夹下的文件夹的名字.js
// 包含当前文件夹所有内容(包含子文件夹和子文件)的数组
var allFiles = fs.readdirSync(__dirname);
// console.log(allFiles);
// TS完整的函数写法：const add2: 函数类型 = 符合函数类型的值,参考一下：
// const add2: (x: number, y: number) => number = function (x: number, y: number): number { return x + y }
// 匿名函数，最常见的写法： 没有看见=>这个符号而是通过参数小括号后面冒号后面的类型以限制返回值的类型
// const add1 = function (x: number, y: number): number { return x + y }
// 过滤出该数组中所有为文件夹的数组，因为文件夹没有后缀名，以此为筛选条件
// 过滤数组，只留下文件夹的数组 arr一般是allFiles
var filterOnlyFoldArr = function (arr) {
    if (arr === void 0) { arr = allFiles; }
    var newArr = [];
    for (var i in arr) {
        if (isFoldOrNot(arr[i])) {
            newArr.push(arr[i]);
        }
    }
    return newArr;
};
exports.filterOnlyFoldArr = filterOnlyFoldArr;
// 过滤出该数组中所有为文件的数组，因为文件肯定有后缀名，以此为筛选条件。我这里就把上面的方法取了个反
// 过滤数组，只留下文件夹的数组 arr一般是allFiles。默认参数还是allFiles
var filterOnlyFileArr = function (arr) {
    if (arr === void 0) { arr = allFiles; }
    var newArr = [];
    for (var i in arr) {
        if (!isFoldOrNot(arr[i])) {
            newArr.push(arr[i]);
        }
    }
    return newArr;
};
exports.filterOnlyFileArr = filterOnlyFileArr;
// console.log("只有文件", filterOnlyFileArr());
// return;
// 更名操作
function renameFileToNewname(oldName, newName) {
    fs.rename(oldName, newName, function (err) {
        if (err) {
            throw err;
        }
        // console.log("rename is done!");
    });
}
exports.renameFileToNewname = renameFileToNewname;
// 验证结尾后缀是否为真。str文件的名字。appoint文件后缀的名字
function my_validationEnd(str, appoint) {
    // 不区分大小写全部转换成小写。
    str = str.toLowerCase();
    var tempArr = str.split(".");
    var endStr = tempArr[tempArr.length - 1];
    if (appoint === endStr) {
        return true;
    }
    return false;
}
// 过滤数组的方法，返回我想要的文件类型的数组。第一个参数文件数组。第二个参数后缀名，字符串。
function filterTypeArr(arr, typeStr) {
    var newArr = [];
    for (var i in arr) {
        if (my_validationEnd(arr[i], typeStr)) {
            newArr.push(arr[i]);
        }
    }
    return newArr;
}
exports.filterTypeArr = filterTypeArr;
// let stat = fs.lstatSync("新建文本文档 (3).txt");
// let stat2 = fs.lstatSync("a");
// console.log(isFoldOrNot('新建文本文档 (3).txt')); //false
// console.log(isFoldOrNot('a')); //true
// 判断是否文件夹
function isFoldOrNot(fileOrFoldName) {
    return fs.lstatSync(fileOrFoldName).isDirectory();
}
exports.isFoldOrNot = isFoldOrNot;
// 获取文件的所有信息
function getFileMsg(file) {
    var msg = fs.statSync(file);
    var size = msg.size / 1024 / 1024;
    var re = /([0-9]+\.[0-9]{1})[0-9]*/;
    var jieQu = size.toString().replace(re, "$1");
    size = jieQu + "MB";
    return {
        name: file,
        size: size,
        atime: msg.atime,
        mtime: msg.mtime,
        ctime: msg.ctime,
        birthtime: msg.birthtime,
    };
}
// getFileMsg('script_ouMeiFilefold文件夹的名字赋给mp4.js')
// console.log('文件大小', getFileMsg('script_ouMeiFilefold文件夹的名字赋给mp4.js'));
// 验证是否是数字 只能判断一位数
function isNum(num) {
    var pattern = /^[0-9]$/;
    /* let str='123'
      let str4='1'
      let str3='9'
      let str2='12a'
      console.log(pattern.test(str));
      console.log(pattern.test(str2));
      console.log(pattern.test(str3));
      console.log(pattern.test(str4)); */
    return pattern.test(num);
}
// 判断是否是小写 一位
function isLow(str) {
    var pattern = /^[a-z]$/;
    /* let str='123'
      let str4='1'
      let str3='9'
      let str2='12a'
      console.log(pattern.test(str));
      console.log(pattern.test(str2));
      console.log(pattern.test(str3));
      console.log(pattern.test(str4)); */
    return pattern.test(str);
}
// 快速排序 递归一定不要用Let，因为一旦除了作用域就失效了。不改变原数组
function my_quick_sort(arr) {
    if (arr.length < 2)
        return arr;
    var piIndex = Math.floor(arr.length / 2);
    //    拿走中间值
    var pi = arr.splice(piIndex, 1)[0];
    var left = [];
    var right = [];
    for (var i in arr) {
        if (arr[i] < pi) {
            left.push(arr[i]);
        }
        else {
            right.push(arr[i]);
        }
    }
    return my_quick_sort(left).concat(pi, my_quick_sort(right));
}
var testarr = [1, 2, 2, 1, 5, 4, 0];
// console.log('我的快速',my_quick_sort(testarr));
// console.log('quick', quick_sort(testarr));
// console.log(testarr.splice(0,1),'testarr');//只有一项的数组
//这里的fileType压根就没用到，谁大小最大，就以哪个文件为准
var basename = require('path').basename;
var proPath = __dirname; // 路径 "/Users/yangxin/code/lib"
// basename(proPath) // 返回结果 lib
// console.log(111111,basename(proPath));//Compressed
// console.log(222222,basename);//[Function: basename]
// console.log(333333,proPath);//C:\Users\Carlos\Downloads\Compressed
// 加上该文件夹名字的信息！
var msgStr = "此文件夹名字：" + basename(proPath) + os.EOL;
// filterOnlyFileArr
function myFileMsgToTxt(fileType) {
    if (fileType === void 0) { fileType = "txt"; }
    // 文件夹名字的数组 os.EOL是换行符号 就等于'\n'
    // console.log("只有文件夹",filterOnlyFoldArr());
    (0, exports.filterOnlyFoldArr)(allFiles).forEach(function (foldItem, index) {
        var foldItemMsg = "文件夹：" + foldItem + os.EOL;
        msgStr += foldItemMsg;
    });
    // 文件名字的数组 os.EOL是换行符号 就等于'\n'，这里的item可以理解为fileItem
    (0, exports.filterOnlyFileArr)(allFiles).forEach(function (item, index) {
        if (item == exports.thisFileName) {
            // 跳出本次循环
            return;
        }
        var itemMsg = getFileMsg(item);
        msgStr += os.EOL + itemMsg.name + os.EOL + itemMsg.size + os.EOL;
        msgStr += "创建时间：" + itemMsg.birthtime + os.EOL + "修改时间：" + itemMsg.ctime + os.EOL;
    });
    // console.log("文件信息msgStr", msgStr);
    // fold就是每一个文件夹
}
myFileMsgToTxt();
// 把我要的JS格式的文件全部追加复制到一个新的文件里面。目录，格式，新文件名字
function appendContentToFile(newFile, str) {
    fs.appendFileSync(newFile, str);
    // console.log(newFile, str);
    console.log("已经将打印出该文件里所有文件的重要信息到txt中！");
}
exports.appendContentToFile = appendContentToFile;
appendContentToFile("1\u6B64\u6587\u4EF6\u5939\u91CC\u9762\u6240\u6709\u6587\u4EF6\u7684\u5177\u4F53\u4FE1\u606F".concat(exports.thisFoldName, ".txt"), msgStr);
